<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>

<!--
	Copyright (c) 1999-2008 by Digital Mars
	All Rights Reserved
	Written by Walter Bright
	www.digitalmars.com
  -->

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" >
<title>std.typetuple - D Programming Language - Digital Mars</title>
<link rel="stylesheet" type="text/css" href="./style.css">
<link rel="icon" type="image/gif" href="./holy.gif" />
</head>

<body>
<div id="heading">
	<a href="http://www.digitalmars.com/"><img src="./dmlogo.gif" width="270" height="53" border="0" alt="www.digitalmars.com" align="left"></a>
	<p align="right">D Programming Language 1.0</p>


	<div id="headingNav">
	<ul>
	<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/Phobos/StdTypeTuple" title="Read/write comments and feedback">Comments</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language" class="dlink">D</a></li>
	<li><a href="http://www.digitalmars.com/advancedsearch.html" title="Search Digital Mars web site">Search</a></li>
	<li><a href="http://www.digitalmars.com/" title="www.digitalmars.com">Home</a></li>
	</ul>
	</div>

	<div id="lastupdate">Last update Wed Oct  1 23:47:52 2008</div>
</div>

<!-- -->

<div id="navigation">
    <div class="navblock">
<form method="get" action="http://www.google.com/search">
<div id="searchbox">
<input id="q" name="q" size="10" value="RTL Search" onFocus='if(this.value == "RTL Search"){this.value="";}'>
<input type="hidden" id="domains" name="domains" value="www.digitalmars.com">
<input type="hidden" id="sitesearch" name="sitesearch" value="www.digitalmars.com/d/1.0/phobos">
<input type="hidden" id="sourceid" name="sourceid" value="google-search">
<input type="submit" id="submit" name="submit" value="Go">
</div>
</form>
<div id="toctop">
    <ul>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language">D ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/lex.html" title="D Language Specification">Language ...</a></li>
	<li><a href="phobos.html" title="D Runtime Library">Phobos ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/comparison.html" title="Language Comparisons">Comparisons ...</a></li>
    </ul>
</div>
</div>
    <div class="navblock">
<ul>
<li><a href="index.html" title="Index of all HTML files">Index</a></li>
</ul>
    <ul>
	<li><a href="object.html" title="root of object hierarchy">object</a></li>
    </ul>
    <h2><a href="phobos.html#std" title="D standard modules">std</a></h2>
    <ul>
	<li><a href="std.base64.html" title="Encode/decode base64 format">std.base64</a></li>
	<li><a href="std.bind.html" title="Function argument binding">std.bind</a></li>
	<li><a href="std.bitarray.html" title="Arrays of bits">std.bitarray</a></li>
	<li><a href="std.boxer.html" title="Box/unbox types">std.boxer</a></li>
	<li><a href="std.compiler.html" title="Information about the D compiler implementation">std.compiler</a></li>
	<li><a href="std.conv.html" title="Conversion of strings to integers">std.conv</a></li>
	<li><a href="std.cover.html" title="D coverage analyzer">std.cover</a></li>
	<li><a href="std.cpuid.html" title="CPU identification">std.cpuid</a></li>
	<li><a href="std.ctype.html" title="Simple character classification">std.ctype</a></li>
	<li><a href="std.date.html" title="Date and time functions">std.date</a></li>
	<li><a href="std.demangle.html" title="Demangle D names">std.demangle</a></li>
	<li><a href="std.file.html" title="Basic file operations">std.file</a></li>
	<li><a href="std.format.html" title="Formatted conversions of values to strings">std.format</a></li>
	<li><a href="std.gc.html" title="Control the garbage collector">std.gc</a></li>
	<li><a href="std.intrinsic.html" title="Compiler built in intrinsic functions">std.intrinsic</a></li>
	<li><a href="std.math.html" title="the usual math functions">std.math</a></li>
	<li><a href="std.md5.html" title="Compute MD5 digests">std.md5</a></li>
	<li><a href="std.metastrings.html" title="Metaprogramming with strings">std.metastrings</a></li>
	<li><a href="std.mmfile.html" title="Memory mapped files">std.mmfile</a></li>
	<li><a href="std.openrj.html" title="Basic database">std.openrj</a></li>
	<li><a href="std.outbuffer.html" title="Assemble data into an array of bytes">std.outbuffer</a></li>
	<li><a href="std.outofmemory.html" title="Out of memory exception">std.outofmemory</a></li>
	<li><a href="std.path.html" title="Manipulate file names, path names, etc.">std.path</a></li>
	<li><a href="std.process.html" title="Create/destroy threads">std.process</a></li>
	<li><a href="std.random.html" title="Random number generation">std.random</a></li>
	<li><a href="std.regexp.html" title="regular expressions">std.regexp</a></li>
	<li><a href="std.signals.html" title="Signals">std.signals</a></li>
	<li><a href="std.socket.html" title="Sockets">std.socket</a></li>
	<li><a href="std.socketstream.html" title="Stream for a blocking, connected Socket">std.socketstream</a></li>
	<li><a href="std.stdint.html" title="Integral types for various purposes">std.stdint</a></li>
	<li><a href="std.stdio.html" title="Standard I/O">std.stdio</a></li>
	<li><a href="std.cstream.html" title="Stream I/O">std.cstream</a></li>
	<li><a href="std.stream.html" title="Stream I/O">std.stream</a></li>
	<li><a href="std.string.html" title="Basic string operations">std.string</a></li>
	<li><a href="std.system.html" title="Inquire about the CPU, operating system">std.system</a></li>
	<li><a href="std.thread.html" title="Thread operations">std.thread</a></li>
	<li><a href="std.traits.html" title="Type traits">std.traits</a></li>
	<li><a href="std.typetuple.html" title="Type tuples">std.typetuple</a></li>
	<li><a href="std.uni.html" title="Unicode classification">std.uni</a></li>
	<li><a href="std.uri.html" title="Encode and decode Uniform Resource Identifiers (URIs)">std.uri</a></li>
	<li><a href="std.utf.html" title="Encode and decode utf character encodings">std.utf</a></li>
	<li><a href="std.zip.html" title="Read/write zip archives">std.zip</a></li>
	<li><a href="std.zlib.html" title="Compression / Decompression of data">std.zlib</a></li>
	<li><a href="std.c.fenv.html" title="Floating point environment">std.c.fenv</a></li>
	<li><a href="std.c.locale.html" title="Locale">std.c.locale</a></li>
	<li><a href="std.c.math.html" title="Math">std.c.math</a></li>
	<li><a href="std.c.process.html" title="Process">std.c.process</a></li>
	<li><a href="std.c.stdarg.html" title="Variadic arguments">std.c.stdarg</a></li>
	<li><a href="std.c.stddef.html" title="Standard definitions">std.c.stddef</a></li>
	<li><a href="std.c.stdio.html" title="Standard I/O">std.c.stdio</a></li>
	<li><a href="std.c.stdlib.html" title="Standard library">std.c.stdlib</a></li>
	<li><a href="std.c.string.html" title="Strings">std.c.string</a></li>
	<li><a href="std.c.time.html" title="Time">std.c.time</a></li>
	<li><a href="std.c.wcharh.html" title="Wide characters">std.c.wcharh</a></li>
	<li><a href="std.windows.charset.html" title="Conversion to/from Windows character sets">std.windows.charset</a></li>
	<li><a href="phobos.html#std_windows" title="Modules specific to Windows">std.windows</a></li>
	<li><a href="phobos.html#std_linux" title="Modules specific to Windows">std.linux</a></li>
	<li><a href="phobos.html#std_c_windows" title="C Windows API">std.c.windows</a></li>
	<li><a href="phobos.html#std_c_linux" title="C Linux API">std.c.linux</a></li>
    </ul>
</div>
</div>
<div id="content">
    <h1><a href="./htmlsrc/std.typetuple.html">std.typetuple</a></h1>
    
Templates with which to manipulate type tuples &#40;also known as type lists&#41;.<br><br>
Some operations on type tuples are built in to the language,
 such as TL[<i>n</i>] which gets the <i>n</i>th type from the
 type tuple. TL[<i>lwr</i> .. <i>upr</i>] returns a new type
 list that is a slice of the old one.<br><br> <br><br>
<b>References:</b><br>Based on ideas in Table 3.1 from
	<a href="http://www.amazon.com/exec/obidos/ASIN/0201704315/ref=ase_classicempire/102-2957199-2585768">
		Modern C++ Design</a>,
	 Andrei Alexandrescu &#40;Addison-Wesley Professional, 2001&#41;<br><br>
<dl>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L49" title="At line 49.">TypeTuple</a>(TList...);</big></dt>
<dd>
Creates a typetuple out of a sequence of zero or more types.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">import</span> <span class="i">std</span>.<span class="i">typetuple</span>;
 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">double</span>) <span class="i">TL</span>;

 <span class="k">int</span> <span class="i">foo</span>(<span class="i">TL</span> <span class="i">td</span>)  <span class="lc">// same as int foo(int, double);</span>
 {
    <span class="k">return</span> <span class="i">td</span>[<span class="n">0</span>] + <span class="k">cast</span>(<span class="k">int</span>)<span class="i">td</span>[<span class="n">1</span>];
 }
 
</pre><br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="i">TypeTuple</span>!(<span class="i">TL</span>, <span class="k">char</span>)
 <span class="lc">// is equivalent to:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">double</span>, <span class="k">char</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L51" title="At line 51.">TypeTuple</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L71" title="At line 71.">IndexOf</a>(T, TList...);</big></dt>
<dd>
Returns the index of the first occurrence of type T in the
 sequence of zero or more types TList.
 If not found, -1 is returned.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">import</span> <span class="i">std</span>.<span class="i">typetuple</span>;
 <span class="k">import</span> <span class="i">std</span>.<span class="i">stdio</span>;

 <span class="k">void</span> <span class="i">foo</span>()
 {
    <span class="i">writefln</span>(<span class="sl">"The index of long is "</span>,
          <span class="i">IndexOf</span>!(<span class="k">long</span>, <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">double</span>)));
    <span class="lc">// prints: The index of long is 1</span>
 }
 
</pre><br><br>
<dl>
<dt><big>int <a href="./htmlsrc/std.typetuple.html#L74" title="At line 74.">IndexOf</a>; [const]</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L94" title="At line 94.">Erase</a>(T, TList...);</big></dt>
<dd>
Returns a typetuple created from TList with the first occurrence,
 if any, of T removed.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="i">Erase</span>!(<span class="k">long</span>, <span class="k">int</span>, <span class="k">long</span>, <span class="k">double</span>, <span class="k">char</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">double</span>, <span class="k">char</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L97" title="At line 97.">Erase</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L116" title="At line 116.">EraseAll</a>(T, TList...);</big></dt>
<dd>
Returns a typetuple created from TList with the all occurrences,
 if any, of T removed.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>) <span class="i">TL</span>;

 <span class="i">EraseAll</span>!(<span class="k">long</span>, <span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">int</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L119" title="At line 119.">EraseAll</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L138" title="At line 138.">NoDuplicates</a>(TList...);</big></dt>
<dd>
Returns a typetuple created from TList with the all duplicate
 types removed.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>, <span class="k">float</span>) <span class="i">TL</span>;

 <span class="i">NoDuplicates</span>!(<span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">float</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L141" title="At line 141.">NoDuplicates</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L158" title="At line 158.">Replace</a>(T, U, TList...);</big></dt>
<dd>
Returns a typetuple created from TList with the first occurrence
 of type T, if found, replaced with type U.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>, <span class="k">float</span>) <span class="i">TL</span>;

 <span class="i">Replace</span>!(<span class="k">long</span>, <span class="k">char</span>, <span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">char</span>, <span class="k">long</span>, <span class="k">int</span>, <span class="k">float</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L161" title="At line 161.">Replace</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L180" title="At line 180.">ReplaceAll</a>(T, U, TList...);</big></dt>
<dd>
Returns a typetuple created from TList with all occurrences
 of type T, if found, replaced with type U.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>, <span class="k">float</span>) <span class="i">TL</span>;

 <span class="i">ReplaceAll</span>!(<span class="k">long</span>, <span class="k">char</span>, <span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">char</span>, <span class="k">char</span>, <span class="k">int</span>, <span class="k">float</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L183" title="At line 183.">ReplaceAll</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L201" title="At line 201.">Reverse</a>(TList...);</big></dt>
<dd>
Returns a typetuple created from TList with the order reversed.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>, <span class="k">float</span>) <span class="i">TL</span>;

 <span class="i">Reverse</span>!(<span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="k">float</span>, <span class="k">int</span>, <span class="k">long</span>, <span class="k">long</span>, <span class="k">int</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L204" title="At line 204.">Reverse</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L222" title="At line 222.">MostDerived</a>(T, TList...);</big></dt>
<dd>
Returns the type from TList that is the most derived from type T.
 If none are found, T is returned.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">class</span> <span class="i">A</span> { }
 <span class="k">class</span> <span class="i">B</span> : <span class="i">A</span> { }
 <span class="k">class</span> <span class="i">C</span> : <span class="i">B</span> { }
 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="i">A</span>, <span class="i">C</span>, <span class="i">B</span>) <span class="i">TL</span>;

 <span class="i">MostDerived</span>!(<span class="i">Object</span>, <span class="i">TL</span>) <span class="i">x</span>;  <span class="lc">// x is declared as type C</span>
 
</pre><br><br>
<dl>
<dt><big>alias T <a href="./htmlsrc/std.typetuple.html#L225" title="At line 225.">MostDerived</a>;</big></dt>
<dd></dd></dl></dd>
<dt><big>template <a href="./htmlsrc/std.typetuple.html#L247" title="At line 247.">DerivedToFront</a>(TList...);</big></dt>
<dd>
Returns the typetuple TList with the types sorted so that the most
 derived types come first.
 <br><br>
<b>Example:</b><br><pre class="d_code">

 <span class="k">class</span> <span class="i">A</span> { }
 <span class="k">class</span> <span class="i">B</span> : <span class="i">A</span> { }
 <span class="k">class</span> <span class="i">C</span> : <span class="i">B</span> { }
 <span class="k">alias</span> <span class="i">TypeTuple</span>!(<span class="i">A</span>, <span class="i">C</span>, <span class="i">B</span>) <span class="i">TL</span>;

 <span class="i">DerivedToFront</span>!(<span class="i">TL</span>)
 <span class="lc">// is the same as:</span>
 <span class="i">TypeTuple</span>!(<span class="i">C</span>, <span class="i">B</span>, <span class="i">A</span>)
 
</pre><br><br>
<dl>
<dt><big>alias TList <a href="./htmlsrc/std.typetuple.html#L250" title="At line 250.">DerivedToFront</a>;</big></dt>
<dd></dd></dl></dd></dl>
    <br><br>
<br><br>
<!-- Google ad -->
<script type="text/javascript"><!--
/**/google_ad_client = "pub-5628673096434613";
/**/google_ad_width = 728;
/**/google_ad_height = 90;
/**/google_ad_format = "728x90_as";
/**/google_ad_channel ="6203743411";
/**/google_page_url = document.location;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>


<div id="copyright">
Public Domain |
Page generated by <a href="http://code.google.com/p/dil">dil</a> on Wed Oct  1 23:47:52 2008
</div>

</body>
</html>